package org.ttitfly.workflow.engine;

import org.ttitfly.workflow.engine.decider.Decider;

/**
 * 转向，包含一个目标运行单元名称和一个decider，decider用于决策结果是否有效，若有效，其target将会是流程下一次调度的一个选择
 * 
 * @author 潘海春
 * @version 2009-9-10
 */
public class Transition {

	/**
	 * 目标运行单元
	 */
	private String target;

	/**
	 * 决策器，根绝决策条件决策转向是否有效
	 */
	private Decider decider;

	/**
	 * 构造函数
	 * 
	 * @param target
	 *            目标运行单元名称
	 */
	public Transition(String target) {
		this(target, null);
	}

	/**
	 * 构造函数
	 * 
	 * @param target
	 *            目标运行单元名称
	 * @param decider
	 *            决策器
	 */
	public Transition(String target, Decider decider) {
		if (target == null || "".equals(target = target.trim())) {
			throw new IllegalArgumentException(
					"argument target can not be empty string!");
		}
		this.target = target;
		this.decider = decider;
	}

	/**
	 * 判断是否有效，如果决策器为空则认为没有限制条件，返回<code>true</code>，否则将委托决策器来决策。
	 * 
	 * @return
	 */
	public boolean isEffective() {
		if (decider == null) {
			return true;
		}
		return decider.decide();
	}

	public String getTarget() {
		return target;
	}

}
